const fs = require('fs');
const path = require('path');
const json = require('./test.json');

// console.log(json);

// 正则表达式来匹配中文字符
const chineseRegex = /[\u4e00-\u9fa5]+/g;

// 提取给定文件内容中的中文字符串
function extractChineseStrings(fileContent) {
  return fileContent.match(chineseRegex);
}

// 函数用于寻找与中文字符串匹配的键
function findKeyForObject(obj, chineseString) {
  for (const key in obj) {
    if (obj.hasOwnProperty(key)) {
      const value = obj[key];
      if (chineseString === value) {
        return key; // 当找到匹配时，返回对应的键
      }

      // 如果值是一个对象，则递归寻找
      if (typeof value === 'object' && value !== null) {
        const result = findKeyForObject(value, chineseString);
        if (result) return result; // 如果在子对象中找到匹配，返回对应的键
      }
    }
  }
  return null; // 如果没有找到匹配，则返回null
}

// 异步递归遍历文件夹和子文件夹中的所有.vue文件
async function traverseDirAndExtractChinese(dirPath) {
  const files = await fs.promises.readdir(dirPath, { withFileTypes: true });

  for (const file of files) {
    const fullPath = path.join(dirPath, file.name);

    if (file.isDirectory()) {
      // 如果是目录，则递归地遍历它
      await traverseDirAndExtractChinese(fullPath);
    } else if (file.isFile() && path.extname(file.name) === '.vue') {
      // 如果是.vue文件，读取文件内容
      let content = await fs.promises.readFile(fullPath, 'utf8');
      const chineseStrings = extractChineseStrings(content);

      // 检查提取到的中文字符串，并替换为对应的键
      if (chineseStrings) {
        chineseStrings.forEach(chineseString => {
          const matchKey = findKeyForObject(json, chineseString);
          if (matchKey) {
            console.log(`替换中文字符串：${chineseString} 为键：${matchKey}`);
            // 使用正则表达式创建唯一匹配字符的模式，以避免替换错误的字符串部分
            const regex = new RegExp(chineseString, 'g');
            console.log(regex);
            content = content.replace(regex, `{{$t('test.${matchKey}')}}`);
          }
        });
        // 写入修改后的内容回.vue文件
        await fs.promises.writeFile(fullPath, content, 'utf8');
      }
    }
  }
}

// 从命令行参数获取目录路径，或者使用当前工作目录
const directoryPath = "F:\\Leadart\\ASSS_HTML\\src"

// 开始遍历并提取中文字符串
traverseDirAndExtractChinese(directoryPath)
  .catch(err => {
    console.error('An error occurred:', err);
  });